package com.webserver.core;

import com.webserver.http.EmptyRequestException;
import com.webserver.http.HttpServletRequest;
import com.webserver.http.HttpServletResponse;

import java.io.*;
import java.net.Socket;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.List;

/**
 * 当前线程任务负责与指定的客户端进行交互
 * 1解析请求
 * 2处理请求
 * 3发送响应第四步
 * 当一个客户端连接进入这个线程上就相当与接通一个电话然后进行上面三部操作
 */
public class ClientHandler implements Runnable {
    //定义一个套接字(电话)属性第五步
    private Socket socket;
    //构造方法里面赋值 第六步
    public ClientHandler(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {

        try {
           //1解析请求第二十三步
            HttpServletRequest request = new HttpServletRequest(socket);
            //创建一个响应对象第四十五步
            HttpServletResponse response = new HttpServletResponse(socket);

            //2处理请求
            DispatcherServlet.getInstance().service(request,response);

            //3发送响应
            //第五十步调方法发送响应
            response.response();

            //3发送响应正文第三十四步


        } catch (IOException  e) {
            e.printStackTrace();
        } catch (EmptyRequestException e) {

        } finally {

            try {
                //交互完毕断开连接
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }

    }
    //第三十五步将消息转成数组发送 做成一个方法



}
